// 对axios进行次封装
import axios from 'axios'
import { Button, Result } from 'antd';
import { notification } from 'antd'
//导入history库, 可以借助该库在组件外跳路由
import { createBrowserHistory } from 'history'

//实例化history对象(用来跳路由)
var history = createBrowserHistory()


var service = axios.create({
    // baseURL: '/api',//基准路径
    baseURL: process.env.REACT_APP_BASE_URL, //基准路径, 公共前缀, 
    //如果同时配置了.env.development 和 .env.production , 
    //在开发环境下 baseURL 会替换为 '/api' , 
    //在生产环境下 baseURL 会替换为 http://cdf.yantianfeng.com/

    timeout: 10 * 1000 //超时时间
})

// 设置请求拦截器
service.interceptors.request.use((config) => {
    // 设置请求头
    config.headers['Authorization'] = "Bearer" + " " + localStorage.getItem('token');

    // 设置第二个请求头
    // //config.headers['X-token'] = localStorage.getItem('token');
    return config;
}, (error) => {
    return Promise.reject(error)
})

// 设置响应拦截器
service.interceptors.response.use((res) => {
    return res;
}, (error) => {
    // 处理错误状态码
    if (error.response.status == 401) {
        < Result
            status="401"
            title="401"
            subTitle="身份认证失败,登陆过期,请重新登录!"
            extra={<Button Button type="primary" > Back Home</Button >}
        />
        // Toast.fail({ message: "身份认证失败,登陆过期,请重新登录!" })
        // 移除本地存储中的请求头
        // 登录失效就跳转到登录页
        notification.error({ message: '登陆过期!' });

        history.push('/login'); //跳转到登录页
        history.go();

        localStorage.removeItem('token'); //删除token
        localStorage.removeItem('userinfo'); //删除userinfo

    }
    else if (error.response.status == 404) {
        < Result
            status="404"
            title="404"
            subTitle="访问路径有误!."
            extra={<Button Button type="primary" > Back Home</Button >}
        />
        // Toast.fail({ message: "访问路径有误!" })
    }
    else if (error.response.status == 500) {
        < Result
            status="500"
            title="500"
            subTitle="服务器内部错误!"
            extra={< Button type="primary" > Back Home</ Button>}
        />
        // Toast.fail({ message: "服务器内部错误!" })
    }

})

export default service;